import { getCartList, changeCount, delSelect } from '@/api/cart/index'
import { Toast } from 'vant'
export default {
    namespaced: true,
    state() {
        return {
            cartList: []
        }
    },
    mutations: {
        // 修改购物车的列表
        setCartList(state, newList) {
            state.cartList = newList
        },
        

        // 修改商品的选中状态
        toggleCheck(state, goodsId) {
           const findObj =  state.cartList.find(item => item.goods_id === goodsId)
            if (findObj) {
                findObj.isChecked = !findObj.isChecked 
           }
        },
        
        // 是否全选
        toggleAllCheck(state,flag) { 
            state.cartList.forEach(item => {
                item.isChecked = flag
            })
        },


        // 修改商品的数量
        changeCount(state, { goodsId, value }) {
            const obj = state.cartList.find(item => item.goods_id === goodsId)
            obj.goods_num = value
        }
    },
    actions: {
        // 获取购物车的列表
        async getCartAction(context) {
            const { data } = await getCartList()
            
            // 后台返回的数据中,不包含复选框的选中状态, 为了实现复选框的功能,
            // 需要手动维护数据,给每一项,添加一个isChecked 状态 (标记当前是否选中)

            data.list.forEach(item => {
                item.isChecked  = true
            });
            context.commit('setCartList',data.list)
        },
        
        // 异步修改商品的数量
         async changeCountAction(context, obj) {
            const { goodsId, value, skuId } = obj
            context.commit('changeCount', {
                goodsId,
                value
            })
            await changeCount(goodsId, value, skuId)
        },
         
        // 异步删除购物车的数量
          async delSelect(context) {
            // 选中的商品
            const selCartList = context.getters.selCartList
            // 通过map方法收集选中的商品的id
            const cartIds = selCartList.map(item => item.id)
              await delSelect(cartIds)
              Toast('删除成功')

              // 重新拉取最新的购物车数据 (重新渲染)
              context.dispatch('getCartAction')
        },
    },
    getters: {

        // 商品总数
        cartTotal(state) { 
            return state.cartList.reduce((item, goods) => item += goods.goods_num, 0)
        },

        // 选中的商品列表
        selCartList(state) {
            return state.cartList.filter(item => item.isChecked)
        },
        
        // 选中的商品总数 
        selCount(state, getters) { 
            return getters.selCartList.reduce((sum, item) => sum += item.goods_num,0)
        },

        // 选中的商品总价
        selPrice(state, getters) { 
            return getters.selCartList.reduce((sum, item) => sum += (item.goods_num * item.goods.goods_price_min), 0).toFixed(2)
        },


        // 全选的状态
        isAllChecked(state) { 
            return state.cartList.every(item=>item.isChecked)
        },
    }
}